{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Importing Libraries","metadata":{}},{"cell_type":"code","source":"! pip install biosppy   ","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:20:23.305869Z","iopub.execute_input":"2021-08-07T03:20:23.306257Z","iopub.status.idle":"2021-08-07T03:20:33.627930Z","shell.execute_reply.started":"2021-08-07T03:20:23.306176Z","shell.execute_reply":"2021-08-07T03:20:33.626777Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"Collecting biosppy\n  Downloading biosppy-0.7.3.tar.gz (85 kB)\n\u001b[K     |████████████████████████████████| 85 kB 1.6 MB/s eta 0:00:011\n\u001b[?25hCollecting bidict\n  Downloading bidict-0.21.2-py2.py3-none-any.whl (37 kB)\nRequirement already satisfied: h5py in /opt/conda/lib/python3.7/site-packages (from biosppy) (2.10.0)\nRequirement already satisfied: matplotlib in /opt/conda/lib/python3.7/site-packages (from biosppy) (3.4.2)\nRequirement already satisfied: numpy in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.19.5)\nRequirement already satisfied: scikit-learn in /opt/conda/lib/python3.7/site-packages (from biosppy) (0.23.2)\nRequirement already satisfied: scipy in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.6.3)\nRequirement already satisfied: shortuuid in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.0.1)\nRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.15.0)\nRequirement already satisfied: joblib in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.0.1)\nRequirement already satisfied: opencv-python in /opt/conda/lib/python3.7/site-packages (from biosppy) (4.5.2.54)\nRequirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (2.8.1)\nRequirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (0.10.0)\nRequirement already satisfied: pyparsing>=2.2.1 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (2.4.7)\nRequirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (1.3.1)\nRequirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (8.2.0)\nRequirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from scikit-learn->biosppy) (2.1.0)\nBuilding wheels for collected packages: biosppy\n  Building wheel for biosppy (setup.py) ... \u001b[?25ldone\n\u001b[?25h  Created wheel for biosppy: filename=biosppy-0.7.3-py2.py3-none-any.whl size=95409 sha256=262fd1157cd6cf45b0f4acb43aa5a9b8df4afd33f52603f90b5d3ab3bda61783\n  Stored in directory: /root/.cache/pip/wheels/2f/4f/8f/28b2adc462d7e37245507324f4817ce1c64ef2464f099f4f0b\nSuccessfully built biosppy\nInstalling collected packages: bidict, biosppy\nSuccessfully installed bidict-0.21.2 biosppy-0.7.3\n\u001b[33mWARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv\u001b[0m\n","output_type":"stream"}]},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport tensorflow as tf \nimport wfdb\nimport os                                                                                                         \nimport gc\nimport scipy       \nimport sklearn\nfrom pathlib import Path\nfrom sklearn.utils import shuffle\nfrom sklearn.manifold import TSNE\nimport seaborn as sns\nfrom sklearn import preprocessing\nimport shutil\nimport math\nimport random\nfrom scipy.spatial import distance\nfrom biosppy.signals import ecg\nfrom scipy.interpolate import PchipInterpolator","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:20:42.077017Z","iopub.execute_input":"2021-08-07T03:20:42.077370Z","iopub.status.idle":"2021-08-07T03:20:48.563407Z","shell.execute_reply.started":"2021-08-07T03:20:42.077339Z","shell.execute_reply":"2021-08-07T03:20:48.562668Z"},"trusted":true},"execution_count":2,"outputs":[]},{"cell_type":"code","source":"try:\n    tpu = tf.distribute.cluster_resolver.TPUClusterResolver()  # TPU detection\n    print('Running on TPU ', tpu.cluster_spec().as_dict()['worker'])\nexcept ValueError:\n    raise BaseException('ERROR: Not connected to a TPU runtime; please see the previous cell in this notebook for instructions!')\n\ntf.config.experimental_connect_to_cluster(tpu)\ntf.tpu.experimental.initialize_tpu_system(tpu)\ntpu_strategy = tf.distribute.experimental.TPUStrategy(tpu)","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:20:49.600629Z","iopub.execute_input":"2021-08-07T03:20:49.601179Z","iopub.status.idle":"2021-08-07T03:20:55.477752Z","shell.execute_reply.started":"2021-08-07T03:20:49.601146Z","shell.execute_reply":"2021-08-07T03:20:55.477108Z"},"trusted":true},"execution_count":3,"outputs":[{"name":"stdout","text":"Running on TPU  ['10.0.0.2:8470']\n","output_type":"stream"}]},{"cell_type":"markdown","source":"# Dataset Creation","metadata":{}},{"cell_type":"code","source":"####### Dataset Creation \n\n###### Constants\nFS = 500\nW_LEN = 256\nW_LEN_1_4 = 256 // 4\nW_LEN_3_4 = 3 * (256 // 4)\n\n###### Function to Read a Record\ndef read_rec(rec_path):\n\n    \"\"\" \n    Function to read record and return Segmented Signals\n\n    INPUTS:-\n    1) rec_path : Path of the Record\n\n    OUTPUTS:-\n    1) seg_sigs : Final Segmented Signals\n\n    \"\"\"\n    number_of_peaks = 2 # For extracting the required number of peaks                                    \n    full_rec = (wfdb.rdrecord(rec_path)).p_signal[:,1] # Entire Record\n\n    f = PchipInterpolator(np.arange(10000),full_rec) # Fitting Interpolation Function\n    x_samp = (np.arange(10000)*(500/360))[:7200] # Fixing Interpolation Input Values\n    full_rec_interp = f(x_samp)  # Intepolating Values \n    r_peaks_init = ecg.hamilton_segmenter(full_rec_interp,360)[0] # R-Peak Segmentation and input is the signal frequency of 500Hz in this case\n    final_peak_index = r_peaks_init[int(r_peaks_init.shape[0] - int((r_peaks_init.shape[0]%number_of_peaks)))-1]\n    r_peaks_final = r_peaks_init[:final_peak_index] # Final Number of R_Peaks\n    full_rec_final = full_rec_interp[:int(r_peaks_final[-1]+W_LEN)] # Final Sequence\n    seg_sigs, r_peaks_ref = segmentSignals(full_rec_final,list(r_peaks_final)) # Final Signal Segmentation\n\n    return seg_sigs # Returning the Ouput of the Signal Segmentation\n\n###### Function to Segment Signals\n\n##### Function\ndef segmentSignals(signal, r_peaks_annot, normalization=True, person_id= None, file_id=None):\n    \n    \"\"\"\n    Segments signals based on the detected R-Peak\n    Args:\n        signal (numpy array): input signal\n        r_peaks_annot (int []): r-peak locations.\n        normalization (bool, optional): apply z-normalization or not? . Defaults to True.\n        person_id ([type], optional): [description]. Defaults to None.\n        file_id ([type], optional): [description]. Defaults to None.\n    Returns:\n            [tuple(numpy array,numpy array)]: segmented signals and refined r-peaks\n    \"\"\"\n    def refine_rpeaks(signal, r_peaks):\n        \"\"\"\n        Refines the detected R-peaks. If the R-peak is slightly shifted, this assigns the \n        highest point R-peak.\n        Args:\n            signal (numpy array): input signal\n            r_peaks (int []): list of detected r-peaks\n        Returns:\n            [numpy array]: refined r-peaks\n        \"\"\"\n        r_peaks2 = np.array(r_peaks)            # make a copy\n        for i in range(len(r_peaks)):\n            r = r_peaks[i]          # current R-peak\n            small_segment = signal[max(0,r-100):min(len(signal),r+100)]         # consider the neighboring segment of R-peak\n            r_peaks2[i] = np.argmax(small_segment) - 100 + r_peaks[i]           # picking the highest point\n            r_peaks2[i] = min(r_peaks2[i],len(signal))                          # the detected R-peak shouldn't be outside the signal\n            r_peaks2[i] = max(r_peaks2[i],0)                                    # checking if it goes before zero    \n        return r_peaks2                     # returning the refined r-peak list\n    \n    segmented_signals = []                      # array containing the segmented beats\n    \n    r_peaks = np.array(r_peaks_annot)\n\n    r_peaks = refine_rpeaks(signal, r_peaks)\n    skip_len = 2 # Parameter to specify number of r_peaks in one signal\n    max_seq_len = 512 # Parameter to specify maximum sequence length\n    \n    for r_curr in range(0,int(r_peaks.shape[0]-(skip_len-1)),skip_len):\n        if ((r_peaks[r_curr]-W_LEN_1_4)<0) or ((r_peaks[r_curr+(skip_len-1)]+W_LEN_3_4)>=len(signal)):           # not enough signal to segment\n            continue\n        segmented_signal = np.array(signal[r_peaks[r_curr]-W_LEN_1_4:r_peaks[r_curr+(skip_len-1)]+W_LEN_3_4])        # segmenting a heartbeat\n        segmented_signal = list(segmented_signal)\n        #print(segmented_signal.shape)\n        \n        if(len(segmented_signal) < 512):\n            for m in range(int(512-len(segmented_signal))): # Zero Padding\n                segmented_signal.append(0)\n        else:\n            segmented_signal = (segmented_signal[:int(max_seq_len)])\n            \n        segmented_signal = np.array(segmented_signal)\n        \n        if(segmented_signal.shape != (512,1)):    \n            segmented_signal = np.reshape(segmented_signal,(512,1))\n            \n        if (normalization):             # Z-score normalization\n            if abs(np.std(segmented_signal))<1e-6:          # flat line ECG, will cause zero division error\n                continue\n            segmented_signal = (segmented_signal - np.mean(segmented_signal)) / np.std(segmented_signal)            \n              \n        #if not np.isnan(segmented_signal).any():                    # checking for nan, this will never happen\n            segmented_signals.append(segmented_signal)\n\n    return segmented_signals,r_peaks           # returning the segmented signals and the refined r-peaks","metadata":{"execution":{"iopub.status.busy":"2021-06-18T07:43:21.438481Z","iopub.execute_input":"2021-06-18T07:43:21.438888Z","iopub.status.idle":"2021-06-18T07:43:21.459343Z","shell.execute_reply.started":"2021-06-18T07:43:21.438841Z","shell.execute_reply":"2021-06-18T07:43:21.458018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"###### Extracting List of the Elements with Two Sessions \ndir = '../input/ecg1d/ecg-id-database-1.0.0'\ntotal_index = 0\nsubjects_with_two = []\n\nfor item in np.sort(os.listdir(dir)):\n    #print('----------------------------------')\n    #print(item)\n    dir_sub = os.path.join(dir,item)\n    if(os.path.isdir(dir_sub)):\n        #print(len(os.listdir(dir_sub))//3)\n        if(len(os.listdir(dir_sub))//3 == 2):\n            total_index = total_index+1   \n            #print(item)\n            subjects_with_two.append(item)\n    #print('----------------------------------')\n\nprint(total_index)\nprint(subjects_with_two)","metadata":{"execution":{"iopub.status.busy":"2021-06-18T07:42:51.897423Z","iopub.execute_input":"2021-06-18T07:42:51.89777Z","iopub.status.idle":"2021-06-18T07:42:52.042704Z","shell.execute_reply.started":"2021-06-18T07:42:51.89774Z","shell.execute_reply":"2021-06-18T07:42:52.041797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"###### Numpy Array Creation\npath_to_dir = '../input/ecg1d/ecg-id-database-1.0.0'\ntotal_folders = 90\ncurrent_index = 0\n\nX_train = []\nX_dev = []\ny_train = []\ny_dev = []\n\n#for item in subjects_with_two:\nfor i in range(2,92):\n\n#if(i != 75):\n\n    print(i-1)\n    folder_path = os.path.join(path_to_dir,np.sort(os.listdir(path_to_dir))[i]) # Path Selection\n    #items_in_folder = int(len(folder_path)//3)\n    #current_storage_path = './5_Beat_Ecg_ECG1D'+'/person'+str(current_index)\n\n    #for j in os.listdir(item):\n\n    for j in range(2):\n\n        rec_path = folder_path+'/'+'rec'+'_'+str(j+1) # Path to Record\n        seg_signal_current = read_rec(rec_path)\n\n        if(j == 0):\n            for k in range(len(seg_signal_current)):\n                #file_name_current = current_storage_path+'/'+str(j)+'_/'+str(k)\n                #np.savez_compressed(file_name_current,seg_signal_current[k])\n                X_train.append(seg_signal_current[k])\n                y_train.append(current_index)\n\n        else:\n            for k in range(len(seg_signal_current)):\n                #file_name_current = current_storage_path+'/'+str(j)+'_/'+str(k)\n                #np.savez_compressed(file_name_current,seg_signal_current[k])\n                X_dev.append(seg_signal_current[k])\n                y_dev.append(current_index)\n\n    current_index = current_index+1\n\n###### Shuffling Numpy Arrays\nX_train,y_train = shuffle(X_train,y_train)\nX_dev,y_dev = shuffle(X_dev,y_dev)\n\n###### Saving Numpy Arrays\nnp.savez_compressed('X_train_ECG1D.npz',np.array(X_train))\nnp.savez_compressed('y_train_ECG1D.npz',np.array(y_train))\nnp.savez_compressed('X_dev_ECG1D.npz',np.array(X_dev))\nnp.savez_compressed('y_dev_ECG1D.npz',np.array(y_dev))  ","metadata":{"execution":{"iopub.status.busy":"2021-06-18T07:43:27.463721Z","iopub.execute_input":"2021-06-18T07:43:27.464162Z","iopub.status.idle":"2021-06-18T07:43:32.95853Z","shell.execute_reply.started":"2021-06-18T07:43:27.464126Z","shell.execute_reply":"2021-06-18T07:43:32.957002Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##### Loading Dataset\nX_train = np.array(np.load('../input/ecg-1d-final-full/X_train_ECG1D_Full.npz',allow_pickle=True)['arr_0'],dtype=np.float16)\nX_dev = np.array(np.load('../input/ecg-1d-final-full/X_dev_ECG1D_Full.npz',allow_pickle=True)['arr_0'],dtype=np.float16)\ny_train = np.load('../input/ecg-1d-final-full/y_train_ECG1D_Full.npz',allow_pickle=True)['arr_0']\ny_dev = np.load('../input/ecg-1d-final-full/y_dev_ECG1D_Full.npz',allow_pickle=True)['arr_0']","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:21:11.282423Z","iopub.execute_input":"2021-08-07T03:21:11.282874Z","iopub.status.idle":"2021-08-07T03:21:11.702795Z","shell.execute_reply.started":"2021-08-07T03:21:11.282846Z","shell.execute_reply":"2021-08-07T03:21:11.702130Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"code","source":"##### Converting Labels to Categorical Format\ny_train_ohot = tf.keras.utils.to_categorical(y_train)\ny_dev_ohot = tf.keras.utils.to_categorical(y_dev)","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:21:14.500922Z","iopub.execute_input":"2021-08-07T03:21:14.501283Z","iopub.status.idle":"2021-08-07T03:21:14.505592Z","shell.execute_reply.started":"2021-08-07T03:21:14.501251Z","shell.execute_reply":"2021-08-07T03:21:14.504665Z"},"trusted":true},"execution_count":5,"outputs":[]},{"cell_type":"markdown","source":"# Model Making","metadata":{}},{"cell_type":"markdown","source":"## Self-Calibrated Convolution","metadata":{}},{"cell_type":"code","source":"###### Model Development : Self-Calibrated \n\n##### Defining Self-Calibrated Block\n\nrate_regularizer = 1e-5\nclass self_cal_Conv1D(tf.keras.layers.Layer):\n\n    \"\"\" \n    This is inherited class from keras.layers and shall be instatition of self-calibrated convolutions\n    \"\"\"\n    \n    def __init__(self,num_filters,kernel_size,num_features):\n    \n        #### Defining Essentials\n        super().__init__()\n        self.num_filters = num_filters\n        self.kernel_size = kernel_size\n        self.num_features = num_features # Number of Channels in Input\n\n        #### Defining Layers\n        self.conv2 = tf.keras.layers.Conv1D(self.num_features/2,self.kernel_size,padding='same',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32',activation='relu')\n        self.conv3 = tf.keras.layers.Conv1D(self.num_features/2,self.kernel_size,padding='same',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32',activation='relu')\n        self.conv4 = tf.keras.layers.Conv1D(self.num_filters/2,self.kernel_size,padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32')\n        self.conv1 = tf.keras.layers.Conv1D(self.num_filters/2,self.kernel_size,padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32')\n        self.upsample = tf.keras.layers.Conv1DTranspose(filters=int(self.num_features/2),kernel_size=4,strides=4)\n        #self.attention_layer = tf.keras.layers.Attention()\n        #self.lstm = tf.keras.layers.LSTM(int(self.num_features/2),return_sequences=True)\n        #self.layernorm = tf.keras.layers.LayerNormalization()\n    \n    def get_config(self):\n\n        config = super().get_config().copy()\n        config.update({\n            'num_filters': self.num_filters,\n            'kernel_size': self.kernel_size,\n            'num_features': self.num_features\n        })\n        return config\n    \n    \n    def call(self,X):\n       \n        \"\"\"\n          INPUTS : 1) X - Input Tensor of shape (batch_size,sequence_length,num_features)\n          OUTPUTS : 1) X - Output Tensor of shape (batch_size,sequence_length,num_features)\n        \"\"\"\n        \n        #### Dimension Extraction\n        b_s = (X.shape)[0] \n        seq_len = (X.shape)[1]\n        num_features = (X.shape)[2]\n        \n        #### Channel-Wise Division\n        X_attention = X[:,:,0:int(self.num_features/2)]\n        X_global = X[:,:,int(self.num_features/2):]\n        \n        #### Self Calibration Block\n\n        ### Local Feature Detection\n\n        ## Down-Sampling\n        #x1 = X_attention[:,0:int(seq_len/5),:]\n        #x2 = X_attention[:,int(seq_len/5):int(seq_len*(2/5)),:]\n        #x3 = X_attention[:,int(seq_len*(2/5)):int(seq_len*(3/5)),:]\n        #x4 = X_attention[:,int(seq_len*(3/5)):int(seq_len*(4/5)),:]\n        #x5 = X_attention[:,int(seq_len*(4/5)):seq_len,:]\n        x_down_sampled = tf.keras.layers.AveragePooling1D(pool_size=4,strides=4)(X_attention)\n        \n        ## Convoluting Down Sampled Sequence \n        #x1 = self.conv2(x1)\n        #x2 = self.conv2(x2)\n        #x3 = self.conv2(x3)\n        #x4 = self.conv2(x4)\n        #x5 = self.conv2(x5)\n        x_down_conv = self.conv2(x_down_sampled)\n        #x_down_feature = self.attention_layer([x_down_sampled,x_down_sampled])\n        #x_down_feature = self.lstm(x_down_sampled)\n        #x_down_feature = self.layernorm(x_down_feature)\n        \n        ## Up-Sampling\n        x_down_upsampled = self.upsample(x_down_conv)   \n        #X_local_upsampled = tf.keras.layers.concatenate([x1,x2,x3,x4,x5],axis=1)\n\n        ## Local-CAM\n        X_local = X_attention + x_down_upsampled  #X_local_upsampled\n\n        ## Local Importance \n        X_2 = tf.keras.activations.sigmoid(X_local)\n\n        ### Self-Calibration\n\n        ## Global Convolution\n        X_3 = self.conv3(X_attention)\n\n        ## Attention Determination\n        X_attention = tf.math.multiply(X_2,X_3)\n\n        #### Self-Calibration Feature Extraction\n        X_4 = self.conv4(X_attention)\n\n        #### Normal Feature Extraction\n        X_1 = self.conv1(X_global)\n\n        #### Concatenating and Returning Output\n        return (tf.keras.layers.concatenate([X_1,X_4],axis=2))","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:21:38.730510Z","iopub.execute_input":"2021-08-07T03:21:38.731032Z","iopub.status.idle":"2021-08-07T03:21:38.746015Z","shell.execute_reply.started":"2021-08-07T03:21:38.731003Z","shell.execute_reply":"2021-08-07T03:21:38.745365Z"},"trusted":true},"execution_count":7,"outputs":[]},{"cell_type":"markdown","source":"## Transformer","metadata":{}},{"cell_type":"code","source":"def get_angles(pos, i, d_model):\n    angle_rates = 1 / np.power(10000, (2 * (i//2)) / np.float32(d_model))\n    return pos * angle_rates\n\ndef positional_encoding(position, d_model):\n    angle_rads = get_angles(np.arange(position)[:, np.newaxis],\n                          np.arange(d_model)[np.newaxis, :],\n                          d_model)\n  \n  # apply sin to even indices in the array; 2i\n    angle_rads[:, 0::2] = np.sin(angle_rads[:, 0::2])\n  \n  # apply cos to odd indices in the array; 2i+1\n    angle_rads[:, 1::2] = np.cos(angle_rads[:, 1::2])\n    \n    pos_encoding = angle_rads[np.newaxis, ...]\n    \n    return tf.cast(pos_encoding, dtype=tf.float32)\n\ndef create_padding_mask(seq):\n    seq = tf.cast(tf.math.equal(seq, 0), tf.float32)\n  \n    # add extra dimensions to add the padding\n    # to the attention logits. \n    return seq[:, tf.newaxis, tf.newaxis, :]  # (batch_size, 1, 1, seq_len)\n\ndef scaled_dot_product_attention(q, k, v, mask):\n    \"\"\"Calculate the attention weights.\n    q, k, v must have matching leading dimensions.\n    k, v must have matching penultimate dimension, i.e.: seq_len_k = seq_len_v.\n    The mask has different shapes depending on its type(padding or look ahead) \n    but it must be broadcastable for addition.\n\n    Args:\n    q: query shape == (..., seq_len_q, depth)\n    k: key shape == (..., seq_len_k, depth)\n    v: value shape == (..., seq_len_v, depth_v)\n    mask: Float tensor with shape broadcastable \n          to (..., seq_len_q, seq_len_k). Defaults to None.\n\n    Returns:\n    output, attention_weights\n    \"\"\"\n\n    matmul_qk = tf.matmul(q, k, transpose_b=True)  # (..., seq_len_q, seq_len_k)\n  \n    # scale matmul_qk\n    dk = tf.cast(tf.shape(k)[-1], tf.float32)\n    scaled_attention_logits = matmul_qk / tf.math.sqrt(dk)\n\n    # add the mask to the scaled tensor.\n    if mask is not None:\n        scaled_attention_logits += (mask * -1e9)  \n\n    # softmax is normalized on the last axis (seq_len_k) so that the scores\n    # add up to 1.\n    attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1)  # (..., seq_len_q, seq_len_k)\n\n    output = tf.matmul(attention_weights, v)  # (..., seq_len_q, depth_v)\n\n    return output, attention_weights\n\nclass MultiHeadAttention(tf.keras.layers.Layer):\n    def __init__(self, d_model, num_heads):\n        super(MultiHeadAttention, self).__init__()\n        self.num_heads = num_heads\n        self.d_model = d_model\n\n        assert d_model % self.num_heads == 0\n\n        self.depth = d_model // self.num_heads\n\n        self.wq = tf.keras.layers.Dense(d_model)\n        self.wk = tf.keras.layers.Dense(d_model)\n        self.wv = tf.keras.layers.Dense(d_model)\n\n        self.dense = tf.keras.layers.Dense(d_model)\n\n    def get_config(self):\n        config = super(MultiHeadAttention, self).get_config().copy()\n        config.update({\n            'd_model': self.d_model,\n            'num_heads':self.num_heads\n        })\n        \n    def split_heads(self, x, batch_size):\n        \n        \"\"\"Split the last dimension into (num_heads, depth).\n        Transpose the result such that the shape is (batch_size, num_heads, seq_len, depth)\n        \"\"\"\n        x = tf.reshape(x, (batch_size, -1, self.num_heads, self.depth))\n        return tf.transpose(x, perm=[0, 2, 1, 3])\n    \n    def call(self, v, k, q, mask): \n        batch_size = tf.shape(q)[0]\n\n        q = self.wq(q)  # (batch_size, seq_len, d_model)\n        k = self.wk(k)  # (batch_size, seq_len, d_model)\n        v = self.wv(v)  # (batch_size, seq_len, d_model)\n\n        q = self.split_heads(q, batch_size)  # (batch_size, num_heads, seq_len_q, depth)\n        k = self.split_heads(k, batch_size)  # (batch_size, num_heads, seq_len_k, depth)\n        v = self.split_heads(v, batch_size)  # (batch_size, num_heads, seq_len_v, depth)\n\n        # scaled_attention.shape == (batch_size, num_heads, seq_len_q, depth)\n        # attention_weights.shape == (batch_size, num_heads, seq_len_q, seq_len_k)\n        scaled_attention, attention_weights = scaled_dot_product_attention(\n            q, k, v, mask)\n\n        scaled_attention = tf.transpose(scaled_attention, perm=[0, 2, 1, 3])  # (batch_size, seq_len_q, num_heads, depth)\n\n        concat_attention = tf.reshape(scaled_attention, \n                                      (batch_size, -1, self.d_model))  # (batch_size, seq_len_q, d_model)\n\n        output = self.dense(concat_attention)  # (batch_size, seq_len_q, d_model)\n\n        return output, attention_weights\n\ndef point_wise_feed_forward_network(d_model, dff):\n    return tf.keras.Sequential([\n      tf.keras.layers.Dense(dff, activation='relu'),  # (batch_size, seq_len, dff)\n      tf.keras.layers.Dense(d_model)  # (batch_size, seq_len, d_model)\n  ])\n\nclass Encoder(tf.keras.layers.Layer):\n    def __init__(self, num_layers, d_model, num_heads, dff,\n               maximum_position_encoding, rate=0.1):\n        super(Encoder, self).__init__()\n\n        self.d_model = d_model\n        self.num_layers = num_layers\n        self.num_heads = num_heads\n        self.dff = dff\n        self.maximum_position_encoding = maximum_position_encoding\n        self.rate = rate\n\n        #self.embedding = tf.keras.layers.Embedding(input_vocab_size, d_model)\n        self.pos_encoding = positional_encoding(maximum_position_encoding, \n                                                self.d_model)\n\n\n        self.enc_layers = [EncoderLayer(d_model, num_heads, dff, rate) \n                           for _ in range(num_layers)]\n\n        self.dropout = tf.keras.layers.Dropout(rate)\n        \n    def get_config(self):\n        config = super(Encoder, self).get_config().copy()\n        config.update({\n            'num_layers': self.num_layers,\n            'd_model': self.d_model,\n            'num_heads':self.num_heads,\n            'dff':self.dff,\n            'maximum_position_encoding':self.maximum_position_encoding,\n            'rate':self.rate  \n        })\n        \n    def call(self, x, training, mask):\n\n        seq_len = tf.shape(x)[1]\n\n        # adding embedding and position encoding.\n        #x = self.embedding(x)  # (batch_size, input_seq_len, d_model)\n        x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))\n        x += self.pos_encoding[:, :seq_len, :]\n\n        x = self.dropout(x, training=training)         \n\n        for i in range(self.num_layers):\n            x = self.enc_layers[i](x, training, mask)\n\n        return x  # (batch_size, input_seq_len, d_model)\n\nclass EncoderLayer(tf.keras.layers.Layer):\n    def __init__(self, d_model, num_heads, dff, rate=0.1):\n        super(EncoderLayer, self).__init__()\n        \n        self.d_model = d_model\n        self.num_heads = num_heads\n        self.dff = dff\n        self.rate = rate\n\n        self.mha = MultiHeadAttention(d_model, num_heads)\n        self.ffn = point_wise_feed_forward_network(d_model, dff)\n\n        self.layernorm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6)\n        self.layernorm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6)\n\n        self.dropout1 = tf.keras.layers.Dropout(rate)\n        self.dropout2 = tf.keras.layers.Dropout(rate)\n        \n    def get_config(self):\n        config = super(EncoderLayer, self).get_config().copy()\n        config.update({\n            'd_model': self.d_model,\n            'num_heads':self.num_heads,\n            'dff':self.dff,\n            'rate':self.rate  \n        })\n\n    def call(self, x, training, mask):\n\n        attn_output, _ = self.mha(x, x, x, mask)  # (batch_size, input_seq_len, d_model)\n        attn_output = self.dropout1(attn_output, training=training)\n        out1 = self.layernorm1(x + attn_output)  # (batch_size, input_seq_len, d_model)\n\n        ffn_output = self.ffn(out1)  # (batch_size, input_seq_len, d_model)\n        ffn_output = self.dropout2(ffn_output, training=training)\n        out2 = self.layernorm2(out1 + ffn_output)  # (batch_size, input_seq_len, d_model)\n    \n        return out2\n    \nclass Transformer(tf.keras.Model):\n    def __init__(self, num_layers, d_model, num_heads, dff, \n                 pe_input, rate=0.1):\n        super(Transformer, self).__init__()\n        \n        self.num_layers = num_layers\n        self.d_model = d_model\n        self.num_heads = num_heads\n        self.dff = dff\n        self.pe_input = pe_input\n        self.rate = rate\n        \n        self.encoder = Encoder(num_layers, d_model, num_heads, dff, \n                                pe_input, rate)\n        \n    def get_config(self):\n        config = super(Transformer,self).get_config().copy()\n        config.update({\n            'num_layers': self.num_layers,\n            'd_model': self.d_model,\n            'num_heads':self.num_heads,\n            'dff':self.dff,\n            'pe_input':self.pe_input,\n            'rate':self.rate  \n        })\n    \n    def call(self, inp, training, enc_padding_mask):\n        return self.encoder(inp, training, enc_padding_mask)","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:21:46.180575Z","iopub.execute_input":"2021-08-07T03:21:46.181006Z","iopub.status.idle":"2021-08-07T03:21:46.218935Z","shell.execute_reply.started":"2021-08-07T03:21:46.180971Z","shell.execute_reply":"2021-08-07T03:21:46.218179Z"},"trusted":true},"execution_count":8,"outputs":[]},{"cell_type":"markdown","source":"## ArcFace Loss","metadata":{}},{"cell_type":"code","source":"class ArcFace(tf.keras.layers.Layer):\n    \n    def __init__(self, n_classes, s, m,regularizer):\n        super().__init__()\n        self.n_classes = n_classes\n        self.s = s\n        self.m = m\n        self.regularizer = tf.keras.regularizers.get(regularizer)\n\n    def get_config(self):\n\n        config = super().get_config().copy()\n        config.update({\n            'n_classes': self.n_classes,\n            's': self.s,\n            'm': self.m,\n            'regularizer': self.regularizer\n        })\n        return config\n\n    def build(self, input_shape):\n        super(ArcFace, self).build(input_shape[0])\n        self.W = self.add_weight(name='W',\n                                shape=(input_shape[0][-1], self.n_classes),\n                                initializer='glorot_uniform',\n                                trainable=True\n                                )\n\n    def call(self, inputs):\n        x, y = inputs\n        c = tf.keras.backend.shape(x)[-1]\n        # normalize feature\n        x = tf.nn.l2_normalize(x, axis=1)\n        # normalize weights\n        W = tf.nn.l2_normalize(self.W, axis=0)\n        # dot product\n        logits = x @ W\n        # add margin\n        # clip logits to prevent zero division when backward\n        theta = tf.acos(tf.keras.backend.clip(logits, -1.0 + tf.keras.backend.epsilon(), 1.0 - tf.keras.backend.epsilon()))\n        target_logits = tf.cos(theta + self.m)\n        # sin = tf.sqrt(1 - logits**2)\n        # cos_m = tf.cos(logits)\n        # sin_m = tf.sin(logits)\n        # target_logits = logits * cos_m - sin * sin_m\n        #\n        logits = logits * (1 - y) + target_logits * y\n        # feature re-scale\n        logits *= self.s\n        out = tf.nn.softmax(logits)    \n        return out\n\n    def compute_output_shape(self, input_shape):\n        return (None, self.n_classes)","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:21:58.561839Z","iopub.execute_input":"2021-08-07T03:21:58.562385Z","iopub.status.idle":"2021-08-07T03:21:58.574291Z","shell.execute_reply.started":"2021-08-07T03:21:58.562339Z","shell.execute_reply":"2021-08-07T03:21:58.573413Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"markdown","source":"# Model Training","metadata":{}},{"cell_type":"code","source":"####### Phase-1 Models\n###### Defining Architecture\n\nwith tpu_strategy.scope():\n\n    ##### SC_Module \n\n    #### Defining Hyperparameters\n    num_layers = 2\n    d_model = 128\n    num_heads = 8\n    dff = 256\n    max_seq_len = 512 #X_train.shape[1]\n    pe_input = 512\n    rate = 0.5\n    num_features = 1\n    num_classes = 89\n\n    #### Defining Layers\n    Input_layer = tf.keras.layers.Input(shape=(max_seq_len,num_features))\n    self_conv1 = self_cal_Conv1D(128,15,128)\n    self_conv2 = self_cal_Conv1D(128,20,128) # Newly Added\n    self_conv3 = self_cal_Conv1D(256,15,128)\n    self_conv4 = self_cal_Conv1D(256,20,256) # Newly Added\n    self_conv5 = self_cal_Conv1D(512,15,256)\n    self_conv6 = self_cal_Conv1D(512,20,512) # Newly Added\n    self_conv7 = self_cal_Conv1D(1024,15,512)\n    self_conv8 = self_cal_Conv1D(1024,20,1024) # Newly Added\n    conv_initial = tf.keras.layers.Conv1D(32,15,padding='same',activation='relu')\n    conv_second = tf.keras.layers.Conv1D(64,15,padding='same',activation='relu')\n    conv_third = tf.keras.layers.Conv1D(128,15,padding='same',activation='relu')\n    #lstm1 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128,activation='tanh',return_sequences=True),merge_mode='ave')\n    transform_1 = tf.keras.layers.Conv1D(128,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transform_2 = tf.keras.layers.Conv1D(256,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transform_3 = tf.keras.layers.Conv1D(512,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transform_4 = tf.keras.layers.Conv1D(1024,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transformer = Transformer(num_layers,d_model,num_heads,dff,pe_input,rate)\n    gap_layer = tf.keras.layers.GlobalAveragePooling1D()\n    arc_logit_layer = ArcFace(89,30.0,0.3,tf.keras.regularizers.l2(1e-4))\n\n    #### Defining Architecture\n    ### Input Layer\n    Inputs = Input_layer\n    Input_Labels = tf.keras.layers.Input(shape=(num_classes,))\n\n    ### Initial Convolutional Layers\n    conv_initial = conv_initial(Inputs)\n    #conv_initial = tf.keras.layers.LayerNormalization()(conv_initial)\n    #conv_initial = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv_initial)     \n    #conv_initial = tf.keras.layers.Add()([conv_initial,Inputs])\n    \n    conv_second = conv_second(conv_initial)\n    #conv_second = tf.keras.layers.LayerNormalization()(conv_second)\n    #conv_second = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv_second)\n    #conv_second = tf.keras.layers.Add()([conv_second,conv_initial])\n    #conv_second = tf.keras.layers.concatenate(axis=2)([conv_initial,conv_second])\n    \n    conv_third = conv_third(conv_second)\n    #conv_third = tf.keras.layers.LayerNormalization()(conv_third)\n    #conv_third = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv_third)\n    #mask = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(Inputs)\n    #conv_third = tf.keras.layers.Add()([conv_third,conv_second])\n    #conv_third = tf.keras.layers.concatenate(axis=2)([conv_initial,conv_second,conv_third])\n    #conv_third = lstm1(conv_second)\n    #conv_third = tf.keras.layers.Attention()([conv_third,conv_third])\n    \n    ### 1st Residual Block\n    #transform_1 = transform_1(conv_third)\n    #conv1 = self_conv1(conv_third)\n    #conv1 = tf.keras.layers.AlphaDropout(rate=0.2)(conv1)\n    #conv2 = self_conv2(conv1)\n    #conv2 = tf.keras.layers.AlphaDropout(rate=0.2)(conv2)\n    #conv2 = tf.keras.layers.Add()([conv2,transform_1])\n    #conv2 = tf.keras.layers.LayerNormalization()(conv2)\n    #conv2 = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv2)\n    #mask = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(mask)    \n\n    ### 2nd Residual Block\n    #conv_third = tf.keras.layers.Attention()([conv_third,conv_third])\n    #transform_2 = transform_2(conv2)\n    #conv3 = self_conv3(conv2)\n    #conv3 = tf.keras.layers.AlphaDropout(rate=0.2)(conv3)\n    #conv4 = self_conv4(conv3)\n    #conv4 = tf.keras.layers.AlphaDropout(rate=0.2)(conv4)\n    #conv4 = tf.keras.layers.Add()([conv4,transform_2])\n    #conv4 = tf.keras.layers.LayerNormalization()(conv4)\n    #conv4 = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv4)\n    #mask = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(mask)\n\n    ### 3rd Residual Block\n    #transform_3 = transform_3(conv4)\n    #conv5 = self_conv5(conv4)\n    #conv5 = tf.keras.layers.AlphaDropout(rate=0.2)(conv5)\n    #conv6 = self_conv6(conv5)\n    #conv6 = tf.keras.layers.AlphaDropout(rate=0.2)(conv6)\n    #conv6 = tf.keras.layers.Add()([conv6,transform_3])\n    #conv6 = tf.keras.layers.LayerNormalization()(conv6)\n    #conv6 = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv6)\n\n    ### 4th Residual Block\n    #transform_4 = transform_4(conv6)\n    #conv7 = self_conv7(conv6)\n    #conv8 = self_conv8(conv7)\n    #conv8 = tf.keras.layers.Add()([conv8,transform_4])\n\n    ### Transformer\n    ## Wide-Head Attention Model\n    #tx_embedding = tf.keras.layers.Lambda(PE_Layer)(Inputs)\n    #tx_embedding = tf.keras.layers.Dropout(rate)(tx_embedding,training=True)\n    #mask_reshaped = tf.keras.layers.Reshape((max_seq_len,))(Inputs)\n    #encoder_op1 = encoder_block1(tx_embedding,mask_reshaped)\n    #encoder_op2 = encoder_block2(encoder_op1,mask_reshaped)\n\n    ## Narrow-Head Attention Model\n    #mask_reshaped = tf.keras.layers.Reshape((160,))(mask)\n    embeddings =  transformer(inp=conv_third,enc_padding_mask=None)\n    #embeddings = transformer(inp=conv6,enc_padding_mask=create_padding_mask(mask))\n    #residual_embeddings = tf.keras.layers.Add()([conv6,embeddings])\n\n    ### Output Layers\n    ## Initial Layers\n    gap_op = gap_layer(embeddings)\n    dense1 = tf.keras.layers.Dense(256,activation='relu')(gap_op)\n    dropout1 = tf.keras.layers.Dropout(rate)(dense1)\n    \n    ## ArcFace Output Network\n    dense2 = tf.keras.layers.Dense(256,kernel_initializer='he_normal',\n                kernel_regularizer=tf.keras.regularizers.l2(1e-4))(dropout1)\n    ##dense2 = tf.keras.layers.BatchNormalization()(dense2)\n    dense3 = arc_logit_layer(([dense2,Input_Labels]))\n    \n    ## Softmax Output Network\n    #dense2 = tf.keras.layers.Dense(256,activation='relu')(dropout1)\n    ###dropout2 = tf.keras.layers.Dropout(rate)(dense2) # Not to be included\n    #dense3 = tf.keras.layers.Dense(35,activation='softmax')(dense2)\n\n    #### Compiling Architecture            \n    ### ArcFace Model Compilation\n    model = tf.keras.models.Model(inputs=[Inputs,Input_Labels],outputs=dense3)\n    model.load_weights('./Ablation_Transformer_ECG1D.h5')\n    model.compile(tf.keras.optimizers.Adam(lr=1e-4,clipnorm=1.0),loss='categorical_crossentropy',metrics=['accuracy'])\n    ### Softmax Model Compilation\n    #model = tf.keras.models.Model(inputs=Inputs,outputs=dense3)\n\nmodel.summary()      \ntf.keras.utils.plot_model(model)\n##### Model Training \n\n#### Model Checkpointing\nfilepath = './Ablation_Transformer_ECG1D.h5'\ncheckpoint = tf.keras.callbacks.ModelCheckpoint(filepath,monitor='val_accuracy',save_best_only=True,mode='max',save_weights_only=True)\n\n#### Custom Learning Rate Schedule\n#def build_lrfn(lr_start=1e-4, lr_max=1e-3, \n#               lr_min=1e-6, lr_rampup_epochs=5, \n#               lr_sustain_epochs=0, lr_exp_decay=.87):\n#    lr_max = lr_max * tpu_strategy.num_replicas_in_sync\n\n#    def lrfn(epoch):\n#        if epoch < lr_rampup_epochs:\n#            lr = (lr_max - lr_start) / lr_rampup_epochs * epoch + lr_start\n#        elif epoch < lr_rampup_epochs + lr_sustain_epochs:\n#            lr = lr_max\n#        else:\n#            lr = (lr_max - lr_min) * lr_exp_decay**(epoch - lr_rampup_epochs - lr_sustain_epochs) + lr_min#\n#        return lr\n#    \n#    return lrfn\n\n#lrfn = build_lrfn()\n#lr_callback = tf.keras.callbacks.LearningRateScheduler(lrfn, verbose=1)\n#callback_list = [checkpoint,  lr_callback]\n\n#### Model Training\n#### Model Training\n### ArcFace Training\n#history = model.fit((X_train,y_train_ohot),y_train_ohot,epochs=500,batch_size=128,\n#                validation_data=((X_dev,y_dev_ohot),y_dev_ohot),validation_batch_size=128,\n#               callbacks=checkpoint)\n\n### Softmax Training \n#history = model.fit(X_train,y_train_ohot,epochs=250,batch_size=128,\n#                validation_data=(X_dev,y_dev_ohot),validation_batch_size=128,\n#                callbacks=checkpoint)\n\n\n##### Plotting Metrics  \n#### Accuracy and Loss Plots \n\n### Accuracy\nplt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('Model Accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')  \nplt.legend(['Train', 'Validation'], loc='best')\nplt.show()\n\n### Loss     \nplt.plot(history.history['loss'])  \nplt.plot(history.history['val_loss'])\nplt.title('Model Loss')  \nplt.ylabel('Loss')         \nplt.xlabel('epoch')\nplt.legend(['Train', 'Validation'], loc='best')   \nplt.show()      \n\n##### Saving Model            \n#model.save_weights('ECG_SCNRNet.h5' )","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:45:35.412589Z","iopub.execute_input":"2021-08-07T03:45:35.412946Z","iopub.status.idle":"2021-08-07T03:45:37.137847Z","shell.execute_reply.started":"2021-08-07T03:45:35.412907Z","shell.execute_reply":"2021-08-07T03:45:37.136897Z"},"trusted":true},"execution_count":17,"outputs":[{"name":"stdout","text":"Model: \"model_3\"\n__________________________________________________________________________________________________\nLayer (type)                    Output Shape         Param #     Connected to                     \n==================================================================================================\ninput_11 (InputLayer)           [(None, 512, 1)]     0                                            \n__________________________________________________________________________________________________\nconv1d_227 (Conv1D)             (None, 512, 32)      512         input_11[0][0]                   \n__________________________________________________________________________________________________\nconv1d_228 (Conv1D)             (None, 512, 64)      30784       conv1d_227[0][0]                 \n__________________________________________________________________________________________________\nconv1d_229 (Conv1D)             (None, 512, 128)     123008      conv1d_228[0][0]                 \n__________________________________________________________________________________________________\ntransformer_5 (Transformer)     (None, 512, 128)     264960      conv1d_229[0][0]                 \n__________________________________________________________________________________________________\nglobal_average_pooling1d_5 (Glo (None, 128)          0           transformer_5[0][0]              \n__________________________________________________________________________________________________\ndense_78 (Dense)                (None, 256)          33024       global_average_pooling1d_5[0][0] \n__________________________________________________________________________________________________\ndropout_33 (Dropout)            (None, 256)          0           dense_78[0][0]                   \n__________________________________________________________________________________________________\ndense_79 (Dense)                (None, 256)          65792       dropout_33[0][0]                 \n__________________________________________________________________________________________________\ninput_12 (InputLayer)           [(None, 89)]         0                                            \n__________________________________________________________________________________________________\narc_face_5 (ArcFace)            (None, 89)           22784       dense_79[0][0]                   \n                                                                 input_12[0][0]                   \n==================================================================================================\nTotal params: 540,864\nTrainable params: 540,864\nNon-trainable params: 0\n__________________________________________________________________________________________________\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":"# Model Testing","metadata":{}},{"cell_type":"markdown","source":"## KNN Testing Based ArcFace Loss","metadata":{}},{"cell_type":"code","source":"###### Testing Model - ArcFace Style\nwith tpu_strategy.scope():     \n\n    def normalisation_layer(x):   \n        return(tf.math.l2_normalize(x, axis=1, epsilon=1e-12))\n\n    #X_dev_flipped = tf.image.flip_up_down(X_dev)  \n    #x_train_flipped = tf.image.flip_up_down(X_train_final)\n\n    predictive_model = tf.keras.models.Model(inputs=model.input,outputs=model.layers[-3].output)\n    predictive_model.compile(tf.keras.optimizers.Adam(lr=1e-4),loss='categorical_crossentropy',metrics=['accuracy'])\n\nwith tpu_strategy.scope():\n    y_in = tf.keras.layers.Input((89,))\n\n    Input_Layer = tf.keras.layers.Input((512,1))\n    op_1 = predictive_model([Input_Layer,y_in])\n\n    ##Input_Layer_Flipped = tf.keras.layers.Input((224,224,3))\n    ##op_2 = predictive_model([Input_Layer_Flipped,y_in]) \n    ##final_op = tf.keras.layers.Concatenate(axis=1)(op_1)\n\n    final_norm_op = tf.keras.layers.Lambda(normalisation_layer)(op_1)\n\n    testing_model = tf.keras.models.Model(inputs=[Input_Layer,y_in],outputs=final_norm_op)\n    testing_model.compile(tf.keras.optimizers.Adam(lr=1e-4),loss='categorical_crossentropy',metrics=['accuracy'])\n\n##### Nearest Neighbor Classification\nfrom sklearn.neighbors import KNeighborsClassifier\nTest_Embeddings = testing_model.predict((X_dev,y_dev_ohot))\nTrain_Embeddings = testing_model.predict((X_train,y_train_ohot))\n\ncol_mean = np.nanmean(Test_Embeddings, axis=0)\ninds = np.where(np.isnan(Test_Embeddings))\n#print(inds)\nTest_Embeddings[inds] = np.take(col_mean, inds[1])\n\ncol_mean = np.nanmean(Train_Embeddings, axis=0)\ninds = np.where(np.isnan(Train_Embeddings))\n#print(inds)\nTrain_Embeddings[inds] = np.take(col_mean, inds[1])\n\n#Test_Embeddings = np.nan_to_num(Test_Embeddings)\n\n##### Refining Test Embeddings\n#for i in range(Train_Embeddings.shape[0]):\n#    for j in range(Train_Embeddings.shape[1]):\n#        if(math.isnan(Train_Embeddings[i,j])):\n#            Train_Embeddings[i,j] == 0\n#        if(Train_Embeddings[i,j]>1e4):\n#            Train_Embeddings[i,j] == 1e4\n\n##### Refining Train Embeddings    \n#for i in range(Test_Embeddings.shape[0]):\n#    for j in range(Test_Embeddings.shape[1]):\n#        if(math.isnan(Test_Embeddings[i,j])):\n#            Test_Embeddings[i,j] == 0\n#        if(Test_Embeddings[i,j]>1e4 or math.isinf(Test_Embeddings[i,j])):\n#            Test_Embeddings[i,j] == 1e4\n\n#del(X_train_final,X_dev,X_dev_flipped,x_train_flipped)\n#gc.collect()\n\nTest_Accuracy_With_Train = []\nTest_Accuracy_With_Test = []\n                                                                     \nfor k in range(1,11):\n    knn = KNeighborsClassifier(n_neighbors=k,metric='euclidean')\n    knn.fit(Train_Embeddings,y_train)\n    Test_Accuracy_With_Train.append(knn.score(Test_Embeddings,y_dev))\n    knn.fit(Test_Embeddings,y_dev)\n    Test_Accuracy_With_Test.append(knn.score(Test_Embeddings,y_dev))\n\nprint('--------------------------------')\nprint(np.max(Test_Accuracy_With_Train))\nprint(np.max(Test_Accuracy_With_Test))\nprint('--------------------------------')\nprint(np.mean(Test_Accuracy_With_Train))\nprint(np.mean(Test_Accuracy_With_Test))\nprint('--------------------------------')\nprint((Test_Accuracy_With_Train)[0])\nprint((Test_Accuracy_With_Test)[0])\nprint('--------------------------------')\n\nplt.plot(np.arange(1,11),np.array(Test_Accuracy_With_Train),label='Test_Accuracy_With_Train')\nplt.plot(np.arange(1,11),np.array(Test_Accuracy_With_Test),label='Test_Accuracy_With_Test')\nplt.title('Testing Accuracy vs Number of Neighbors')\nplt.xlabel('Number of Neighbors')\nplt.ylabel('Test Accuracy')\nplt.legend()       \nplt.show()  \n\nnp.savez_compressed('TestEmb_Ablation_Transformer.npz',Test_Embeddings)\nnp.savez_compressed('TrainEmb_Ablation_Transformer.npz',Train_Embeddings)","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:45:52.629754Z","iopub.execute_input":"2021-08-07T03:45:52.630059Z","iopub.status.idle":"2021-08-07T03:46:08.179819Z","shell.execute_reply.started":"2021-08-07T03:45:52.630030Z","shell.execute_reply":"2021-08-07T03:46:08.179025Z"},"trusted":true},"execution_count":18,"outputs":[{"name":"stdout","text":"--------------------------------\n0.854954954954955\n1.0\n--------------------------------\n0.843963963963964\n0.9538738738738738\n--------------------------------\n0.854954954954955\n1.0\n--------------------------------\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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eeqpp3jooYc44YQT6j3njBkzmDJlCsuWLWPWrFlceumlAMybN48bb7yRvXv3kpyczDvvvENaWho33XQTr7/+OnFxcVx99dVcf/31NWPOZWdnU1BQwNSpU5kzZw533HEHq1evZs2aNfTp04d77rmHKVOmsHfvXgAefvjhmsB233338dRTTxEXF8e3v/1trr76ai688EI+//xzAFauXMlFF11Us+6Xk5NDZmYmq1atYsCAAWzYsIHzzz+fuXPnMnnyZObOnctvf/tb1q1bx5lnnsnnn3/Obbfdxv79+/noo4+45ZZbAFi6dCkTJkzg66+/5qc//WlYJYMrr7ySlJQUFixYwPjx47n44ou58cYbKSsrIzU1lWnTpjFo0CDmzJnD/fffzyuvvMIdd9zB119/zZo1a5r1nvWJaOAQkRm4kkO2iBThekolAqjqI7i5gE/Hze27DzcpPF6AuAuY553qTlUNNLL/GNdbKxWY7b0iK3sAXPocPHGWK3lc8Qokp0f8bY053FSV66+/nlmzZpGTk8PMmTO59dZbefzxx7n33ntZu3YtycnJ7Nq1i06dOnHttdeGVEqZOXMmb731FsuXL+ehhx7i0ksv5cCBA1x00UXMnDmTsWPHUlJSQmpqKo8++ijr1q2jsLCQhIQEduxorH+Ns3TpUj766CNSU1PZt28fb731FikpKaxcuZJLLrmEgoICZs+ezaxZs/j0009JS0tjx44ddOnShY4dO1JYWMioUaOYNm0aV111VYPvM378eObOnUtVVRUDBw7kuOOO44033uDMM89k4cKFjB07ls2bNwOQlJTEnXfeSUFBAQ8//DDgSg/Lly/nvffeo7S0lEGDBvGjH/0o5AfvwD37M3fuXOLj4ykpKeHDDz8kISGBt99+m1/96lf861//OuiYQ33PYBENHKp6SRPbFfhJA9seBx6vJ70AGNYiGQxH77FwweMw8zLX5nHJDIhv/o03Jli4JYNIKC8vZ/HixUyaNAmAqqoqcnNzARgxYgSXXXYZkydPrlPX35RAKaFPnz707NmT733ve+zYsYMNGzaQm5vL2LFjAcjMzATg7bff5tprr62phunSpUuT73H22WeTmpoKuKfxr7vuOgoLC4mPj+fLL7+sOe9VV11FWlpanfP+4Ac/YNq0afzxj39k5syZfPbZZw2+z7hx42oCx/HHH88xxxzD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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":"## t-SNE ","metadata":{}},{"cell_type":"code","source":"####### t-SNE Plot Generation\n###### Model Creation\n#with tpu_strategy.scope():          \n#    tsne_model = tf.keras.models.Model(inputs=model.input,outputs=model.layers[-4].output)\n#    tsne_model.compile(tf.keras.optimizers.Adam(lr=1e-4),loss='categorical_crossentropy',metrics=['accuracy'])\n#tsne_model.summary()\n\n###### Model Predicted\n#embeddings_final = tsne_model.predict((X_dev,y_exp))\n\n###### t-SNE plot plotting\n##### Reduction to Lower Dimensions\ntsne_X_dev = TSNE(n_components=2,perplexity=30,learning_rate=10,n_iter=2000,n_iter_without_progress=50).fit_transform(Test_Embeddings)\n\n##### Plotting\nj = 0 # Index for rotating legend\nplt.rcParams[\"figure.figsize\"] = [12,8]\nmStyles = [\".\",\",\",\"o\",\"v\",\"^\",\"<\",\">\",\"1\",\"2\",\"3\",\"4\",\"8\",\"s\",\"p\",\"P\",\"*\",\"h\",\"H\",\"+\",\"x\",\"X\",\"D\",\"d\",\"|\",\"_\",0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10]\nfor idx,color_index,marker_type in zip(list(np.arange(89)),sns.color_palette('muted',47),mStyles):\n    plt.scatter(tsne_X_dev[y_dev == idx, 0], tsne_X_dev[y_dev == idx, 1],marker=marker_type)\n#plt.legend([str(j) for j in range(89)])\nplt.savefig('tsne_plot_5000_iters.png')\nplt.savefig('tsne_plot_5000_iters.pdf')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-07T03:46:34.332845Z","iopub.execute_input":"2021-08-07T03:46:34.333207Z","iopub.status.idle":"2021-08-07T03:46:43.879110Z","shell.execute_reply.started":"2021-08-07T03:46:34.333178Z","shell.execute_reply":"2021-08-07T03:46:43.878208Z"},"trusted":true},"execution_count":19,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 864x576 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]}]}